package multiplex.dataaccess.teste;

import java.util.List;

import multiplex.dataaccess.DaoException;
import multiplex.dataaccess.dao.LocalizacaoDao;
import multiplex.dataaccess.dao.SalaDao;
import multiplex.model.Localizacao;
import multiplex.model.Sala;
import multiplex.model.SalaTipo;

public class SalaDaoTeste implements IDaoTeste{
	
	public void run(){
		SaveTeste();
		GetAndUpdateTeste();
		RemoveTeste();
	}
	
	private void SaveTeste(){
		LocalizacaoDao localizacaoDao = new LocalizacaoDao();
		SalaDao salaDao = new SalaDao();
		Localizacao localizacao = new Localizacao();
		localizacao.setNome("Multiplex Maranguape");
		localizacao.setLugarMarcado(true);
		localizacao.setCidade("Maranguape");
		localizacaoDao.save(localizacao);
		localizacao = localizacaoDao.getAll().get(0);
		Sala sala = new Sala();
		sala.setSalaTipo(SalaTipo.TEATHER);
		sala.setTecno3D(true);
		sala.setLocalizacao(localizacao);
		salaDao.save(sala);
		System.out.println("Sala1 salva com sucesso!");
		sala = new Sala();
		sala.setSalaTipo(SalaTipo.HALL);
		sala.setTecno3D(false);
		sala.setLocalizacao(localizacao);
		salaDao.save(sala);
		System.out.println("Sala2 salva com sucesso!");
		localizacao = new Localizacao();
		localizacao.setNome("Multiplex Ibiapina");
		localizacao.setLugarMarcado(false);
		localizacao.setCidade("Ibiapina");
		localizacaoDao.save(localizacao);
		localizacao = localizacaoDao.getAll().get(0);
		localizacao = (localizacaoDao.getAll().get(0).getId()==localizacao.getId()) ? 
				localizacaoDao.getAll().get(1) : localizacao;
		sala = new Sala();
		sala.setSalaTipo(SalaTipo.HALL);
		sala.setTecno3D(false);
		sala.setLocalizacao(localizacao);
		salaDao.save(sala);
		System.out.println("Sala3 salva com sucesso!");
	}
	private void GetAndUpdateTeste(){
		List<Localizacao> localizacoes;
		LocalizacaoDao localizacaoDAO = new LocalizacaoDao();
		localizacoes=localizacaoDAO.getAll();
		Localizacao localizacao0 = localizacoes.get(0);
		Localizacao localizacao1 = localizacoes.get(1);
		List<Sala> salas0 = localizacao0.getSalas();
		List<Sala> salas1 = localizacao1.getSalas();
		if (!((salas0.size()==1 && salas1.size()==2) || (salas0.size()==2&&salas1.size()==1))) {
			throw new DaoException();
		}
		SalaDao salaDao = new SalaDao();
		Sala sala = salas0.get(0);
		System.out.println("Imprimindo uma sala para teste:");
		System.out.println(new Integer(sala.getId()).toString()+"\n"+sala.getLocalizacao().getNome()+
				"\n"+sala.getSalaTipo().getNome());
		sala.setTecno3D(true);
		sala.setLocalizacao(localizacao1);
		salaDao.save(sala);
		System.out.println("Salas recuperadas e atualizadas com sucesso");
	}
	
	private void RemoveTeste() {
		LocalizacaoDao localizacaoDAO = new LocalizacaoDao();
		SalaDao salaDao = new SalaDao();
		List<Localizacao> localizacoes = localizacaoDAO.getAll();
		// encontrar sala pelo GetByLocalizacao
		List<Sala> salas = salaDao.getAllFromLocalizacao(localizacoes.get(0));
		// encontrar sala pela localizacao
		salas = localizacoes.get(0).getSalas();
		// encontrar pelo getAll e apagar tudo
		salas = salaDao.getAll();
		for(Sala sala: salas) {
			salaDao.remove(sala);
		}
		// apagar as localizacoes
		localizacoes = localizacaoDAO.getAll();
		for (Localizacao localizacao: localizacoes) {
			localizacaoDAO.remove(localizacao);
		}	
		System.out.println("Salas deletadas com sucesso!");
	}
	
}
